# 文件: src/views/home.py
from nicegui import ui, run
from src.utils.loggers import app_init_logger
from src.views.content_chaxunfenxi import Content_ChaxunFenxi
from src.database.data_chuli import read_database, readColumnVinDict
import os
from io import BytesIO
import pandas as pd
from pathlib import Path
import json
from src.database.data_chuli import refresh_database, read_excel_data


from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from src.app import APP


class LayoutTemplate:
    """通用页面布局模板"""

    def __init__(self):
        self.dark_mode = ui.dark_mode()

    def set_APP(self, app: 'APP'):
        self.APP: 'APP' = app

    def create_header(self):
        """创建顶部导航栏"""
        with ui.header(elevated=True).style('background-color: #3874c0'):
            ui.button(on_click=lambda: self.toggle_sidebar(),
                      icon='menu').props('flat color=white')
            ui.label('三坐标数据分析').style(
                'color: white; font-size: 1.5rem; font-weight: bold')
            with ui.row().classes('ml-auto'):
                ui.button(icon='notifications', on_click=lambda: ui.notify(
                    '暂无新通知')).props('flat color=white')
                ui.button(icon='account_circle', on_click=lambda: ui.notify(
                    '用户中心')).props('flat color=white')
                ui.button(icon='dark_mode', on_click=lambda: self.toggle_dark_mode()).props(
                    'flat color=white')

    def create_sidebar(self):
        """创建侧边栏"""
        with ui.left_drawer(value=True, bordered=True).classes('bg-blue-1') as self.sidebar:
            ui.label('导航菜单').classes('text-h6 text-center q-pa-md')

            with ui.column().classes('full-width q-pa-sm'):
                ui.button('查询分析', icon='dashboard', on_click=lambda: self.show_content(
                    '查询分析')).props('flat align="left"').classes('full-width')
                ui.button('上传数据', icon='upload', on_click=lambda: self.show_content(
                    '上传数据')).props('flat align="left"').classes('full-width')
                ui.button('日常监控', icon='monitor', on_click=lambda: self.show_content(
                    '日常监控')).props('flat align="left"').classes('full-width')
                ui.button('设置', icon='settings', on_click=lambda: self.show_content(
                    '设置')).props('flat align="left"').classes('full-width')
                ui.button('关于', icon='info', on_click=lambda: self.show_content(
                    '关于')).props('flat align="left"').classes('full-width')

                ui.separator()

                ui.button('退出', icon='logout', on_click=lambda: ui.notify('退出系统')).props(
                    'flat align="left" color="negative"').classes('full-width')

    def create_footer(self):
        """创建底部页脚"""
        with ui.footer().style('background-color: #f5f5f5'):
            ui.label(
                '© 2025 三坐标数据分析 - Powered by NiceGUI').style('text-align: center; color: #666')

    def create_content(self):
        """创建主内容区域"""
        with ui.column().classes('full-width q-pa-md'):
            self.content_container = ui.column().classes('full-width')
            with self.content_container:
                ui.label('欢迎来到三坐标数据分析系统,点击左侧【查询分析】进入查询分析页面')

    def show_content(self, page_name: str):
        """显示不同的内容页面"""
        self.content_container.clear()

        with self.content_container:
            ui.label(f'{page_name}页面').classes('text-h4 q-mb-md')

            if page_name == '查询分析':
                self.chaxunfenxi()
            elif page_name == '上传数据':
                pass
                self.create_upload_content()
            elif page_name == '日常监控':
                pass
                self.create_monitor_content()
                # self.create_monitor_content()
            elif page_name == '设置':
                self.create_settings_content()
            elif page_name == '关于':
                self.create_about_content()

    def chaxunfenxi(self):
        """创建仪表盘内容"""
        Content_ChaxunFenxi(self.content_container, self.APP).chaxunfenxi()

    def create_upload_content(self):
        """创建上传内容"""
        from src.views.content_upload import Content_Upload
        Content_Upload(self.content_container,
                       self.APP).create_upload_content()

    def create_monitor_content(self):
        """创建用户管理内容"""
        ui.label('用户列表').classes('text-h5 q-mb-md')

        columns = [
            {'name': 'id', 'label': 'ID', 'field': 'id', 'sortable': True},
            {'name': 'name', 'label': '姓名', 'field': 'name', 'sortable': True},
            {'name': 'email', 'label': '邮箱', 'field': 'email', 'sortable': True},
            {'name': 'role', 'label': '角色', 'field': 'role', 'sortable': True},
        ]

        rows = [
            {'id': 1, 'name': '张三', 'email': 'zhang@example.com', 'role': '管理员'},
            {'id': 2, 'name': '李四', 'email': 'li@example.com', 'role': '用户'},
            {'id': 3, 'name': '王五', 'email': 'wang@example.com', 'role': '用户'},
        ]

        ui.table(columns=columns, rows=rows,
                 row_key='id').classes('full-width')

    def create_settings_content(self):
        """创建设置内容"""
        ui.label('系统设置').classes('text-h5 q-mb-md')

        with ui.card().classes('full-width q-pa-md'):
            ui.label('基本设置').classes('text-h6 q-mb-md')

            with ui.column().classes('q-gutter-md'):
                ui.switch('启用通知', value=True)
                ui.switch('启用深色模式', value=False).bind_value(
                    self.dark_mode, 'value')
                ui.select(['中文', 'English', '日本語'], value='中文', label='语言')
                ui.slider(min=0, max=100, value=50,
                          ).classes('full-width')
                ui.button('保存设置', on_click=lambda: ui.notify('设置已保存'))

    def create_about_content(self):
        """创建关于内容"""
        ui.label('关于系统').classes('text-h5 q-mb-md')

        with ui.card().classes('full-width q-pa-md'):
            ui.label('通用页面布局系统').classes('text-h6')
            ui.label('这是一个使用 NiceGUI 构建的通用页面布局示例')
            ui.label('版本: 1.0.0')
            ui.label('作者: AI Assistant')
            ui.label('功能特性:')
            ui.label('• 响应式布局设计')
            ui.label('• 深色/浅色主题切换')
            ui.label('• 侧边栏导航')
            ui.label('• 模块化内容区域')

    def toggle_sidebar(self):
        """切换侧边栏显示状态"""
        self.sidebar.toggle()

    def toggle_dark_mode(self):
        """切换深色模式"""
        self.dark_mode.toggle()

    def build(self):
        """构建完整页面"""
        self.create_header()
        self.create_sidebar()
        self.create_content()
        self.create_footer()

        # 展示查询分析页面
        # self.chaxunfenxi()
        # self.toggle_sidebar

        # 获取基础数据
        # print('111111111111...build')
        ui.timer(0.1, self.init_base_data, once=True)

    async def init_base_data(self):
        """获取基础数据"""
        # 从数据库获取数据
        # print('222222222222...init_base_data')

        try:
            df = await run.io_bound(read_database)
            # await asyncio.sleep(5)
            # 处理数据
            # ...
            # 存储数据
            self.APP.NiceGUIApp.storage.client['coord_data'] = df
            # self.APP.

            app_init_logger.info(f'coord_data shape为: {df.shape}')

            self.APP.NiceGUIApp.storage.client['columnVinDict'] = readColumnVinDict(
            )

        except Exception as e:
            app_init_logger.error(f'获取基础数据失败: {e}')


g_main_window = LayoutTemplate()

# 在页面函数之外为drawer添加样式
ui.add_head_html('''
    <style>
        .q-drawer {
            background: linear-gradient(to bottom, #f0f8ff, #e6f3ff);
        }
        .dark .q-drawer {
            background: linear-gradient(to bottom, #1e293b, #0f172a);
        }
    </style>
''')
